1 package com.iluwatar; 2 3 import java.util.List; 4 5 public class TreasureChestItemIterator implements ItemIterator { 6 7 private TreasureChest chest; 8 private int idx; 9 private ItemType type; 10 11 public TreasureChestItemIterator(TreasureChest chest, ItemType type) { 12 this.chest = chest; 13 this.type = type; 14 this.idx = -1; 15 } 16 17 @Override 18 public boolean hasNext() { 19 return findNextIdx() != -1; 20 } 21 22 @Override 23 public Item next() { 24 idx = findNextIdx(); 25 if (idx != -1) { 26 return chest.getItems().get(idx); 27 } 28 return null; 29 } 30 31 private int findNextIdx() { 32 33 List<Item> items = chest.getItems(); 34 boolean found = false; 35 int tempIdx = idx; 36 while (!found) { 37 tempIdx++; 38 if (tempIdx >= items.size()) { 39 tempIdx = -1; 40 break; 41 } 42 if (type.equals(ItemType.ANY) 43 || items.get(tempIdx).getType().equals(type)) { 44 break; 45 } 46 } 47 return tempIdx; 48 } 49 }